package com.micro.modual.controller;

import com.micro.core.resp.RespJson;
import com.micro.core.resp.RespJsonData;
import com.micro.core.resp.RespJsonPageData;
import com.micro.modual.model.bo.systemelement.SystemElementBO;
import com.micro.modual.model.bo.systemelement.SystemElementValidBO;
import com.micro.modual.model.dto.systemelement.SystemElementDetailDTO;
import com.micro.modual.model.dto.systemelement.SystemElementListDTO;
import com.micro.modual.service.SystemElementService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.*;

import java.util.List;
import java.util.Map;

/**
 * <h1>系统元素表 控制器</h1>
 * @author levelcoder
 * @version V1.0.0
 * @email LevelCoder@126.com
 * @date 2020-08-04 00:27:46
 */
@Api(value = "元素管理",tags = "元素管理")
@RestController
@RequestMapping(value = "systemElement")
public class SystemElementController {

    @Autowired
    private SystemElementService systemElementService;

    /**
     * <h2>根据菜单编号查询元素信息</h2>
     * @param menuCode 菜单编号
     * @return
     */
    @ApiOperation(value = "查询系统元素表列表" ,notes = "查询系统元素表列表")
    @GetMapping(value = "/findSystemElementList/{menuCode}")
    public RespJsonData<List<SystemElementDetailDTO>> findSystemElementList(@PathVariable("menuCode") String menuCode){
        return systemElementService.findSystemElementList(menuCode);
    }


    /**
     * <h2>根据主键编号查看系统元素表详情</h2>
     * @param id  系统元素表 主键编号
     * @return {@link SystemElementDetailDTO}  系统元素表 详情
     */
    @ApiOperation(value = "查询系统元素表详情",notes = "根据主键编号，查询系统元素表详情")
    @GetMapping(value = "/findSystemElementDetail/{id}")
    public RespJsonData<SystemElementDetailDTO> findSystemElementDetail(@PathVariable("id") Long id){
        return systemElementService.findDetail(id,SystemElementDetailDTO.class);
    }

    /**
     * <h2>新增系统元素表详情</h2>
     * @param systemElementBO {@link SystemElementBO} 系统元素表 新增/修改 请求对象
     * @return {@link RespJson} 返回结果基础类
     */
    @ApiOperation(value = "新增系统元素表",notes = "新增系统元素表")
    @PostMapping(value = "/addSystemElement")
    public RespJson addSystemElement(@RequestBody SystemElementBO systemElementBO){
        return systemElementService.addSystemElement(systemElementBO);
    }

    /**
     * <h2>修改系统元素表详情</h2>
     * @param systemElementBO  {@link SystemElementBO} 系统元素表 新增/修改 请求对象
     * @return {@link RespJson} 返回结果基础类
     */
    @ApiOperation(value = "修改系统元素表",notes = "修改系统元素表")
    @PostMapping(value = "/editSystemElement")
    public RespJson editSystemElement(@RequestBody SystemElementBO systemElementBO){
        return systemElementService.editSystemElement(systemElementBO);
    }

    /**
     * <h2>根据主键编号删除系统元素表信息</h2>
     * @param id  系统元素表 主键编号
     * @return  {@link RespJson} 返回结果基础类
     */
    @ApiOperation(value = "删除系统元素表",notes = "根据地址ID，删除系统元素表")
    @PostMapping(value = "/deleteSystemElement/{id}")
    public RespJson deleteSystemElement(@PathVariable("id") Long id){
        return systemElementService.deleteSystemElement(id);
    }

    /**
     * <h2>校验元素名称重复性</h2>
     * @param systemElementValidBO {@link SystemElementValidBO} 元素校验请求对象
     * @return
     */
    @ApiOperation(value = "校验元素名称重复性",notes = "校验元素名称重复性")
    @PostMapping(value = "/validataElementExist")
    public RespJson validataElementExist(@RequestBody SystemElementValidBO systemElementValidBO){
        return systemElementService.validataElementExist(systemElementValidBO);
    }

    /**
     * <h2>校验授权编号重复性</h2>
     * @param systemElementValidBO {@link SystemElementValidBO} 元素校验请求对象
     * @return
     */
    @ApiOperation(value = "校验授权编号重复性",notes = "校验授权编号重复性")
    @PostMapping(value = "/validataElementAuthCodeExist")
    public RespJson validataElementAuthCodeExist(@RequestBody SystemElementValidBO systemElementValidBO){
        return systemElementService.validataElementAuthCodeExist(systemElementValidBO);
    }
}

